gtkbutton: Handle crossing events without the event window
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 31 Mar 2017 15:59:43 +0000 (17:59 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 25 May 2017 14:25:58 +0000 (16:25 +0200)
The event shall no longer be "directed" to the event window, but the
widget. Getting a enter/leave event is enough now to know whether the
pointer is inside or outside the widget.

gtk/gtkbutton.c
gtk/gtkbuttonprivate.h
gtk/gtkmodelbutton.c

index 60660905ff7dd7b26b166f247c7b3e94b3a5df09..951eb1829fba953ba95692726eb74464136cb1c4 100644 (file)
@@ -473,7 +473,7 @@ gtk_button_init (GtkButton *button)
   g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button);
   g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button);
   g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button);
-  gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_BUBBLE);
+  gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_CAPTURE);
 
   priv->gadget = gtk_css_custom_gadget_new_for_node (gtk_widget_get_css_node (GTK_WIDGET (button)),
                                                      GTK_WIDGET (button),
@@ -977,12 +977,8 @@ gtk_button_enter_notify (GtkWidget        *widget,
   GtkButton *button = GTK_BUTTON (widget);
   GtkButtonPrivate *priv = button->priv;
 
-  if ((event->window == button->priv->event_window) &&
-      (event->detail != GDK_NOTIFY_INFERIOR))
-    {
-      priv->in_button = TRUE;
-      gtk_button_update_state (button);
-    }
+  priv->in_button = TRUE;
+  gtk_button_update_state (button);
 
   return FALSE;
 }
@@ -994,12 +990,8 @@ gtk_button_leave_notify (GtkWidget        *widget,
   GtkButton *button = GTK_BUTTON (widget);
   GtkButtonPrivate *priv = button->priv;
 
-  if ((event->window == button->priv->event_window) &&
-      (event->detail != GDK_NOTIFY_INFERIOR))
-    {
-      priv->in_button = FALSE;
-      gtk_button_update_state (button);
-    }
+  priv->in_button = FALSE;
+  gtk_button_update_state (button);
 
   return FALSE;
 }
index 075f855012d55e22b22c960d0c39d5473face114..8a85676fe874f58705980e5fc925e8ad8a4bce81 100644 (file)
@@ -32,7 +32,6 @@ struct _GtkButtonPrivate
   GtkCssGadget          *gadget;
 
   GdkDevice             *grab_keyboard;
-  GdkWindow             *event_window;
 
   GtkGesture            *gesture;
 
index 7c84725f889b206089c9909a8d6a98f8037ec1cb..28489b04efd62c6a82fceb29e4c7b7928bf809d8 100644 (file)
@@ -872,18 +872,6 @@ gtk_model_button_allocate (GtkCssGadget        *gadget,
       gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline);
     }
 
-  if (gtk_widget_get_realized (widget))
-    {
-      GtkAllocation border_allocation;
-      gtk_css_gadget_get_border_allocation (gadget, &border_allocation, NULL);
-
-      gdk_window_move_resize (GTK_BUTTON (widget)->priv->event_window,
-                              border_allocation.x,
-                              border_allocation.y,
-                              border_allocation.width,
-                              border_allocation.height);
-    }
-
   gtk_container_get_children_clip (GTK_CONTAINER (widget), out_clip);
   gdk_rectangle_union (out_clip, &check_clip, out_clip);
 }